<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.15"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MNN: include/Matrix.h 源文件</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">MNN
   &#160;<span id="projectnumber">1.0</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.8.15 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',false,false,'search.php','搜索');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">Matrix.h</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_matrix_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2006 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Use of this source code is governed by a BSD-style license that can be</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * found in the LICENSE file.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">/* Generated by tools/bookmaker from include/core/Matrix.h and docs/SkMatrix_Reference.bmh</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">   on 2018-07-13 08:15:11. Additional documentation and examples can be found at:</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">   https://skia.org/user/api/SkMatrix_Reference</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">   You may edit either file directly. Structural changes to public interfaces require</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">   editing both files. After editing docs/SkMatrix_Reference.bmh, run:</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">       bookmaker -b docs -i include/core/Matrix.h -p</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">   to create an updated version of this file.</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment">//  Modified by jiangxiaotang on 2018/09/19.</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment">//  Copyright © 2018, Alibaba Group Holding Limited</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#ifndef SkMatrix_DEFINED</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#define SkMatrix_DEFINED</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_rect_8h.html">Rect.h</a>&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespace_m_n_n.html">MNN</a> {</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="keyword">namespace </span>CV {</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html">   48</a></span>&#160;<span class="keyword">class </span><a class="code" href="_m_n_n_define_8h.html#a692428e2a0af8ffb79376d223a0695ab">MNN_PUBLIC</a> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a> {</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a994a4f0be12f2881186892d123f83026">   50</a></span>&#160;    <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a994a4f0be12f2881186892d123f83026">Matrix</a>() {</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;        setIdentity();</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    }</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a85cd67b59f24ab307950b437c4669eae">   64</a></span>&#160;    <span class="keyword">static</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a85cd67b59f24ab307950b437c4669eae">MakeScale</a>(<span class="keywordtype">float</span> sx, <span class="keywordtype">float</span> sy) {</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a> m;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;        m.<a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a32c757775b188138cf0b89f2cfd7f2fd">setScale</a>(sx, sy);</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;        <span class="keywordflow">return</span> m;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    }</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a3b05fbab55e352623bc6472a3a29b426">   79</a></span>&#160;    <span class="keyword">static</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a3b05fbab55e352623bc6472a3a29b426">MakeScale</a>(<span class="keywordtype">float</span> scale) {</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;        <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a> m;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;        m.<a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a32c757775b188138cf0b89f2cfd7f2fd">setScale</a>(scale, scale);</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;        <span class="keywordflow">return</span> m;</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    }</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ad0a7c082d559ef73f93ec16e9644b590">   95</a></span>&#160;    <span class="keyword">static</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ad0a7c082d559ef73f93ec16e9644b590">MakeTrans</a>(<span class="keywordtype">float</span> dx, <span class="keywordtype">float</span> dy) {</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;        <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a> m;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;        m.<a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a64ddd5b5f07a3c7671502769cf95ecf8">setTranslate</a>(dx, dy);</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;        <span class="keywordflow">return</span> m;</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    }</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#afd03e03f146c891e3a7dd64cea4d09cc">  118</a></span>&#160;    <span class="keyword">static</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#afd03e03f146c891e3a7dd64cea4d09cc">MakeAll</a>(<span class="keywordtype">float</span> scaleX, <span class="keywordtype">float</span> skewX, <span class="keywordtype">float</span> transX, <span class="keywordtype">float</span> skewY, <span class="keywordtype">float</span> scaleY, <span class="keywordtype">float</span> transY, <span class="keywordtype">float</span> pers0,</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;                          <span class="keywordtype">float</span> pers1, <span class="keywordtype">float</span> pers2) {</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;        <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a> m;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;        m.<a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a41c5adfb5b4236e756b95884de47c985">setAll</a>(scaleX, skewX, transX, skewY, scaleY, transY, pers0, pers1, pers2);</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;        <span class="keywordflow">return</span> m;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    }</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a4d66f9e294a7bf8fcd111568f7f096c3">  129</a></span>&#160;    <span class="keyword">enum</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a4d66f9e294a7bf8fcd111568f7f096c3">TypeMask</a> {</div><div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a4d66f9e294a7bf8fcd111568f7f096c3a7c9c1f245488e9304bad456dba786b91">  130</a></span>&#160;        kIdentity_Mask    = 0,    </div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a4d66f9e294a7bf8fcd111568f7f096c3a310a4123e7192b899ad0f68ed1b6f38f">  131</a></span>&#160;        kTranslate_Mask   = 0x01, </div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a4d66f9e294a7bf8fcd111568f7f096c3a6f6bedaa06c972b92fcd81ef9619e702">  132</a></span>&#160;        kScale_Mask       = 0x02, </div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a4d66f9e294a7bf8fcd111568f7f096c3a6f3fcf03cf1d72ebbcf19c7013376c0c">  133</a></span>&#160;        kAffine_Mask      = 0x04, </div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a4d66f9e294a7bf8fcd111568f7f096c3a3658085367eabd3791636278654aab19">  134</a></span>&#160;        kPerspective_Mask = 0x08, </div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    };</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a920af77c5e089af12f9884583216ee89">  145</a></span>&#160;    <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a4d66f9e294a7bf8fcd111568f7f096c3">TypeMask</a> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a920af77c5e089af12f9884583216ee89">getType</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        <span class="keywordflow">if</span> (fTypeMask &amp; kUnknown_Mask) {</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;            fTypeMask = this-&gt;computeTypeMask();</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        }</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        <span class="comment">// only return the public masks</span></div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a4d66f9e294a7bf8fcd111568f7f096c3">TypeMask</a>)(fTypeMask &amp; 0xF);</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    }</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a80a9efb21f22e19461a7f15f41c7e301">  161</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a80a9efb21f22e19461a7f15f41c7e301">isIdentity</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;        <span class="keywordflow">return</span> this-&gt;getType() == 0;</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    }</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a1e7d34b3eb6adb9ec940827edf03082b">  174</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a1e7d34b3eb6adb9ec940827edf03082b">isScaleTranslate</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;        <span class="keywordflow">return</span> !(this-&gt;getType() &amp; ~(kScale_Mask | kTranslate_Mask));</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    }</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#af7c20c9a4df9dbe0d602271baa2fae8c">  186</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#af7c20c9a4df9dbe0d602271baa2fae8c">isTranslate</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        <span class="keywordflow">return</span> !(this-&gt;getType() &amp; ~(kTranslate_Mask));</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    }</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#aae4f4671dcd3eb69251b6b69b756c8eb">  211</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#aae4f4671dcd3eb69251b6b69b756c8eb">rectStaysRect</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;        <span class="keywordflow">if</span> (fTypeMask &amp; kUnknown_Mask) {</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;            fTypeMask = this-&gt;computeTypeMask();</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;        }</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;        <span class="keywordflow">return</span> (fTypeMask &amp; kRectStaysRect_Mask) != 0;</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    }</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a0fe9863cb0f149e97c57e0bd310a8091">  239</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a0fe9863cb0f149e97c57e0bd310a8091">preservesAxisAlignment</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;        <span class="keywordflow">return</span> this-&gt;rectStaysRect();</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    }</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a7de74100127ba6292318d4105e2448e0">  246</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kMScaleX = 0; </div><div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a37665e4b858862fdc50366fac19ac7b1">  247</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kMSkewX  = 1; </div><div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a202d2de9bc274df21d07e0d30fb7f7a4">  248</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kMTransX = 2; </div><div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a254d3c4f79dadfcde314f757430d46ae">  249</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kMSkewY  = 3; </div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a0740678fdc865ecc7ffbe116fa4adb45">  250</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kMScaleY = 4; </div><div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a92341274274d04e3fd668843157ed393">  251</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kMTransY = 5; </div><div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ad89d5ae10e6a97e467805b7e67016071">  252</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kMPersp0 = 6; </div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a5335529230f770344e12c15814a73040">  253</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kMPersp1 = 7; </div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#aef5f38e0114da2fb099852078743d7ad">  254</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kMPersp2 = 8; </div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ae8e060cdf6868cdfdf0bae432aa17fd5">  259</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kAScaleX = 0; </div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#af9c71cf11a29bf7344357c28b4193545">  260</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kASkewY  = 1; </div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a0eb9dedcccbc251c9a412cf71f4e0b3c">  261</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kASkewX  = 2; </div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a2df867ef1512a44a8539d46e0acad6a9">  262</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kAScaleY = 3; </div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ad5ae3231629fc59390a63661edf1f447">  263</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kATransX = 4; </div><div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a86ee756b37c955f7935cee8ea0e29081">  264</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kATransY = 5; </div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a6d75cd8885bc169ebbed0a3842d0a136">  273</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a6d75cd8885bc169ebbed0a3842d0a136">operator[]</a>(<span class="keywordtype">int</span> index)<span class="keyword"> const </span>{</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;        <a class="code" href="_m_n_n_define_8h.html#ae353a9c1a1afe84eeefafac7d7f5bed1">MNN_ASSERT</a>((<span class="keywordtype">unsigned</span>)index &lt; 9);</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;        <span class="keywordflow">return</span> fMat[index];</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;    }</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a8cb83b8451e52f04224a2f10a8d7e977">  285</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a8cb83b8451e52f04224a2f10a8d7e977">get</a>(<span class="keywordtype">int</span> index)<span class="keyword"> const </span>{</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;        <a class="code" href="_m_n_n_define_8h.html#ae353a9c1a1afe84eeefafac7d7f5bed1">MNN_ASSERT</a>((<span class="keywordtype">unsigned</span>)index &lt; 9);</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;        <span class="keywordflow">return</span> fMat[index];</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    }</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#afda91b2de2547c56812a990b343adea8">  295</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#afda91b2de2547c56812a990b343adea8">getScaleX</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;        <span class="keywordflow">return</span> fMat[kMScaleX];</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    }</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#aebb3f83534c38eec1c605c143db5e440">  304</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#aebb3f83534c38eec1c605c143db5e440">getScaleY</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;        <span class="keywordflow">return</span> fMat[kMScaleY];</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    }</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a4a4b603b48253e55fc27c2677898fe18">  314</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a4a4b603b48253e55fc27c2677898fe18">getSkewY</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;        <span class="keywordflow">return</span> fMat[kMSkewY];</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    }</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;</div><div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a7a50cf880189f8828cbe643c20086c36">  324</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a7a50cf880189f8828cbe643c20086c36">getSkewX</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;        <span class="keywordflow">return</span> fMat[kMSkewX];</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    }</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#af6e21da1f6a1342a1e7c3f060d96af4d">  333</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#af6e21da1f6a1342a1e7c3f060d96af4d">getTranslateX</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;        <span class="keywordflow">return</span> fMat[kMTransX];</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    }</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a8312ffc5455b9217d8a3f3975237c026">  342</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a8312ffc5455b9217d8a3f3975237c026">getTranslateY</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;        <span class="keywordflow">return</span> fMat[kMTransY];</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    }</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a5f8ffb32f8988f89960254e982d5bc87">  350</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a5f8ffb32f8988f89960254e982d5bc87">getPerspX</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;        <span class="keywordflow">return</span> fMat[kMPersp0];</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    }</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;</div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a63dce01735b6ee0eddf90ee71d7eadf2">  358</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a63dce01735b6ee0eddf90ee71d7eadf2">getPerspY</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;        <span class="keywordflow">return</span> fMat[kMPersp1];</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;    }</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ab70b003dcbc742777bb908511be6fd63">  372</a></span>&#160;    <span class="keywordtype">float</span>&amp; <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ab70b003dcbc742777bb908511be6fd63">operator[]</a>(<span class="keywordtype">int</span> index) {</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;        <a class="code" href="_m_n_n_define_8h.html#ae353a9c1a1afe84eeefafac7d7f5bed1">MNN_ASSERT</a>((<span class="keywordtype">unsigned</span>)index &lt; 9);</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;        this-&gt;setTypeMask(kUnknown_Mask);</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;        <span class="keywordflow">return</span> fMat[index];</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;    }</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a95657f702e16d797477c9aa24ac4a0fd">  385</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a95657f702e16d797477c9aa24ac4a0fd">set</a>(<span class="keywordtype">int</span> index, <span class="keywordtype">float</span> value) {</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;        <a class="code" href="_m_n_n_define_8h.html#ae353a9c1a1afe84eeefafac7d7f5bed1">MNN_ASSERT</a>((<span class="keywordtype">unsigned</span>)index &lt; 9);</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;        fMat[index] = value;</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;        this-&gt;setTypeMask(kUnknown_Mask);</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    }</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a2ef2a1e031dd5de7ff653038c401c1d4">  395</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a2ef2a1e031dd5de7ff653038c401c1d4">setScaleX</a>(<span class="keywordtype">float</span> v) {</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;        this-&gt;set(kMScaleX, v);</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    }</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;</div><div class="line"><a name="l00403"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a536b3ee8befe547496e47bef9422ca22">  403</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a536b3ee8befe547496e47bef9422ca22">setScaleY</a>(<span class="keywordtype">float</span> v) {</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;        this-&gt;set(kMScaleY, v);</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;    }</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a28974d70ccb159f0c79ebc46f73fdfde">  411</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a28974d70ccb159f0c79ebc46f73fdfde">setSkewY</a>(<span class="keywordtype">float</span> v) {</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;        this-&gt;set(kMSkewY, v);</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    }</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a0e7c43a69da5564fade1134e245e5e65">  419</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a0e7c43a69da5564fade1134e245e5e65">setSkewX</a>(<span class="keywordtype">float</span> v) {</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;        this-&gt;set(kMSkewX, v);</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    }</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;</div><div class="line"><a name="l00427"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#aafea25177ca15b3e66b796811ff12839">  427</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#aafea25177ca15b3e66b796811ff12839">setTranslateX</a>(<span class="keywordtype">float</span> v) {</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;        this-&gt;set(kMTransX, v);</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;    }</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#af906c3d8207529707974d551d329ce39">  435</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#af906c3d8207529707974d551d329ce39">setTranslateY</a>(<span class="keywordtype">float</span> v) {</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;        this-&gt;set(kMTransY, v);</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;    }</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac07d0f297600849a05dc3b175098121e">  444</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac07d0f297600849a05dc3b175098121e">setPerspX</a>(<span class="keywordtype">float</span> v) {</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;        this-&gt;set(kMPersp0, v);</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;    }</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;</div><div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a387100b9690549b671cf69a82cc134d1">  453</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a387100b9690549b671cf69a82cc134d1">setPerspY</a>(<span class="keywordtype">float</span> v) {</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;        this-&gt;set(kMPersp1, v);</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;    }</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a41c5adfb5b4236e756b95884de47c985">  473</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a41c5adfb5b4236e756b95884de47c985">setAll</a>(<span class="keywordtype">float</span> scaleX, <span class="keywordtype">float</span> skewX, <span class="keywordtype">float</span> transX, <span class="keywordtype">float</span> skewY, <span class="keywordtype">float</span> scaleY, <span class="keywordtype">float</span> transY, <span class="keywordtype">float</span> persp0,</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;                <span class="keywordtype">float</span> persp1, <span class="keywordtype">float</span> persp2) {</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;        fMat[kMScaleX] = scaleX;</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;        fMat[kMSkewX]  = skewX;</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;        fMat[kMTransX] = transX;</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;        fMat[kMSkewY]  = skewY;</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;        fMat[kMScaleY] = scaleY;</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;        fMat[kMTransY] = transY;</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;        fMat[kMPersp0] = persp0;</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;        fMat[kMPersp1] = persp1;</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;        fMat[kMPersp2] = persp2;</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;        this-&gt;setTypeMask(kUnknown_Mask);</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    }</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;</div><div class="line"><a name="l00493"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a2e02d4d6e16ccdb49029aa44bab08330">  493</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a2e02d4d6e16ccdb49029aa44bab08330">get9</a>(<span class="keywordtype">float</span> buffer[9])<span class="keyword"> const </span>{</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;        memcpy(buffer, fMat, 9 * <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;    }</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;    <span class="keywordtype">void</span> set9(<span class="keyword">const</span> <span class="keywordtype">float</span> buffer[9]);</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    <span class="keywordtype">void</span> reset();</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;</div><div class="line"><a name="l00535"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ad46ca718c770bba11643c0ecc9a402fa">  535</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ad46ca718c770bba11643c0ecc9a402fa">setIdentity</a>() {</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;        this-&gt;reset();</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    }</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;    <span class="keywordtype">void</span> setTranslate(<span class="keywordtype">float</span> dx, <span class="keywordtype">float</span> dy);</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;    <span class="keywordtype">void</span> setScale(<span class="keywordtype">float</span> sx, <span class="keywordtype">float</span> sy, <span class="keywordtype">float</span> px, <span class="keywordtype">float</span> py);</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    <span class="keywordtype">void</span> setScale(<span class="keywordtype">float</span> sx, <span class="keywordtype">float</span> sy);</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    <span class="keywordtype">void</span> setRotate(<span class="keywordtype">float</span> degrees, <span class="keywordtype">float</span> px, <span class="keywordtype">float</span> py);</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    <span class="keywordtype">void</span> setRotate(<span class="keywordtype">float</span> degrees);</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;    <span class="keywordtype">void</span> setSinCos(<span class="keywordtype">float</span> sinValue, <span class="keywordtype">float</span> cosValue, <span class="keywordtype">float</span> px, <span class="keywordtype">float</span> py);</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;    <span class="keywordtype">void</span> setSinCos(<span class="keywordtype">float</span> sinValue, <span class="keywordtype">float</span> cosValue);</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;    <span class="keywordtype">void</span> setSkew(<span class="keywordtype">float</span> kx, <span class="keywordtype">float</span> ky, <span class="keywordtype">float</span> px, <span class="keywordtype">float</span> py);</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;    <span class="keywordtype">void</span> setSkew(<span class="keywordtype">float</span> kx, <span class="keywordtype">float</span> ky);</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    <span class="keywordtype">void</span> setConcat(<span class="keyword">const</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a>&amp; a, <span class="keyword">const</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a>&amp; b);</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;    <span class="keywordtype">void</span> preTranslate(<span class="keywordtype">float</span> dx, <span class="keywordtype">float</span> dy);</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;    <span class="keywordtype">void</span> preScale(<span class="keywordtype">float</span> sx, <span class="keywordtype">float</span> sy, <span class="keywordtype">float</span> px, <span class="keywordtype">float</span> py);</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;    <span class="keywordtype">void</span> preScale(<span class="keywordtype">float</span> sx, <span class="keywordtype">float</span> sy);</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    <span class="keywordtype">void</span> preRotate(<span class="keywordtype">float</span> degrees, <span class="keywordtype">float</span> px, <span class="keywordtype">float</span> py);</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;    <span class="keywordtype">void</span> preRotate(<span class="keywordtype">float</span> degrees);</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;    <span class="keywordtype">void</span> preSkew(<span class="keywordtype">float</span> kx, <span class="keywordtype">float</span> ky, <span class="keywordtype">float</span> px, <span class="keywordtype">float</span> py);</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;    <span class="keywordtype">void</span> preSkew(<span class="keywordtype">float</span> kx, <span class="keywordtype">float</span> ky);</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;    <span class="keywordtype">void</span> preConcat(<span class="keyword">const</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a>&amp; other);</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;</div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;    <span class="keywordtype">void</span> postTranslate(<span class="keywordtype">float</span> dx, <span class="keywordtype">float</span> dy);</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;</div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;    <span class="keywordtype">void</span> postScale(<span class="keywordtype">float</span> sx, <span class="keywordtype">float</span> sy, <span class="keywordtype">float</span> px, <span class="keywordtype">float</span> py);</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;    <span class="keywordtype">void</span> postScale(<span class="keywordtype">float</span> sx, <span class="keywordtype">float</span> sy);</div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;</div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;    <span class="keywordtype">bool</span> postIDiv(<span class="keywordtype">int</span> divx, <span class="keywordtype">int</span> divy);</div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;    <span class="keywordtype">void</span> postRotate(<span class="keywordtype">float</span> degrees, <span class="keywordtype">float</span> px, <span class="keywordtype">float</span> py);</div><div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;    <span class="keywordtype">void</span> postRotate(<span class="keywordtype">float</span> degrees);</div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;    <span class="keywordtype">void</span> postSkew(<span class="keywordtype">float</span> kx, <span class="keywordtype">float</span> ky, <span class="keywordtype">float</span> px, <span class="keywordtype">float</span> py);</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;    <span class="keywordtype">void</span> postSkew(<span class="keywordtype">float</span> kx, <span class="keywordtype">float</span> ky);</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;    <span class="keywordtype">void</span> postConcat(<span class="keyword">const</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a>&amp; other);</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;</div><div class="line"><a name="l01064"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16"> 1064</a></span>&#160;    <span class="keyword">enum</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16">ScaleToFit</a> {</div><div class="line"><a name="l01065"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16a72d6657e24aae9858f946dcc8d638538"> 1065</a></span>&#160;        <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16a72d6657e24aae9858f946dcc8d638538">kFill_ScaleToFit</a>,   </div><div class="line"><a name="l01066"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16a7ecd2ad82e428b97949ce05fb72d2bb7"> 1066</a></span>&#160;        <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16a7ecd2ad82e428b97949ce05fb72d2bb7">kStart_ScaleToFit</a>,  </div><div class="line"><a name="l01067"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16aae2bd4bf3c03002dc0011669a9125a95"> 1067</a></span>&#160;        <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16aae2bd4bf3c03002dc0011669a9125a95">kCenter_ScaleToFit</a>, </div><div class="line"><a name="l01068"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16ad8816240d08e10c1dc565d0218a927cd"> 1068</a></span>&#160;        <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16ad8816240d08e10c1dc565d0218a927cd">kEnd_ScaleToFit</a>,    </div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;    };</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;    <span class="keywordtype">bool</span> setRectToRect(<span class="keyword">const</span> <a class="code" href="struct_m_n_n_1_1_c_v_1_1_rect.html">Rect</a>&amp; src, <span class="keyword">const</span> <a class="code" href="struct_m_n_n_1_1_c_v_1_1_rect.html">Rect</a>&amp; dst, ScaleToFit stf);</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;</div><div class="line"><a name="l01103"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a012a6fe8b976cae6f08d356855a5fd53"> 1103</a></span>&#160;    <span class="keyword">static</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a012a6fe8b976cae6f08d356855a5fd53">MakeRectToRect</a>(<span class="keyword">const</span> <a class="code" href="struct_m_n_n_1_1_c_v_1_1_rect.html">Rect</a>&amp; src, <span class="keyword">const</span> <a class="code" href="struct_m_n_n_1_1_c_v_1_1_rect.html">Rect</a>&amp; dst, <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16">ScaleToFit</a> stf) {</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;        <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a> m;</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;        m.<a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#afe9ff946b4145e71f40205c9c23d63c7">setRectToRect</a>(src, dst, stf);</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;        <span class="keywordflow">return</span> m;</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;    }</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;    <span class="keywordtype">bool</span> setPolyToPoly(<span class="keyword">const</span> <a class="code" href="struct_m_n_n_1_1_c_v_1_1_point.html">Point</a> src[], <span class="keyword">const</span> <a class="code" href="struct_m_n_n_1_1_c_v_1_1_point.html">Point</a> dst[], <span class="keywordtype">int</span> count);</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;</div><div class="line"><a name="l01132"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a037d7599f234e75c0869302e10a3dd32"> 1132</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a037d7599f234e75c0869302e10a3dd32">invert</a>(<a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a>* inverse)<span class="keyword"> const </span>{</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;        <span class="comment">// Allow the trivial case to be inlined.</span></div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;        <span class="keywordflow">if</span> (this-&gt;isIdentity()) {</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;            <span class="keywordflow">if</span> (inverse) {</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;                inverse-&gt;<a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a361d0f247ef268c716f3575c2c46c640">reset</a>();</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;            }</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;        }</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;        <span class="keywordflow">return</span> this-&gt;invertNonIdentity(inverse);</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;    }</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> SetAffineIdentity(<span class="keywordtype">float</span> affine[6]);</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;    <span class="keywordtype">bool</span> asAffine(<span class="keywordtype">float</span> affine[6]) <span class="keyword">const</span>;</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;    <span class="keywordtype">void</span> setAffine(<span class="keyword">const</span> <span class="keywordtype">float</span> affine[6]);</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;</div><div class="line"><a name="l01209"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a93dbff13c64c0ed0e9005b2609c550a1"> 1209</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a93dbff13c64c0ed0e9005b2609c550a1">mapPoints</a>(<a class="code" href="struct_m_n_n_1_1_c_v_1_1_point.html">Point</a> dst[], <span class="keyword">const</span> <a class="code" href="struct_m_n_n_1_1_c_v_1_1_point.html">Point</a> src[], <span class="keywordtype">int</span> count)<span class="keyword"> const </span>{</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;        <a class="code" href="_m_n_n_define_8h.html#ae353a9c1a1afe84eeefafac7d7f5bed1">MNN_ASSERT</a>((dst &amp;&amp; src &amp;&amp; count &gt; 0) || 0 == count);</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;        <span class="comment">// no partial overlap</span></div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;        <a class="code" href="_m_n_n_define_8h.html#ae353a9c1a1afe84eeefafac7d7f5bed1">MNN_ASSERT</a>(src == dst || &amp;dst[count] &lt;= &amp;src[0] || &amp;src[count] &lt;= &amp;dst[0]);</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;        this-&gt;getMapPtsProc()(*<span class="keyword">this</span>, dst, src, count);</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;    }</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;</div><div class="line"><a name="l01239"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ab7c756e36573cc6ef1c4f77c3088eaee"> 1239</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#ab7c756e36573cc6ef1c4f77c3088eaee">mapPoints</a>(<a class="code" href="struct_m_n_n_1_1_c_v_1_1_point.html">Point</a> pts[], <span class="keywordtype">int</span> count)<span class="keyword"> const </span>{</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;        this-&gt;mapPoints(pts, pts, count);</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;    }</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;</div><div class="line"><a name="l01259"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a3f97f8217503e8cb7ed70d2d54960a54"> 1259</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a3f97f8217503e8cb7ed70d2d54960a54">mapXY</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <a class="code" href="struct_m_n_n_1_1_c_v_1_1_point.html">Point</a>* result)<span class="keyword"> const </span>{</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;        this-&gt;getMapXYProc()(*<span class="keyword">this</span>, x, y, result);</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;    }</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;</div><div class="line"><a name="l01279"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a0d45157a305e7063765f534030163f21"> 1279</a></span>&#160;    <a class="code" href="struct_m_n_n_1_1_c_v_1_1_point.html">Point</a> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a0d45157a305e7063765f534030163f21">mapXY</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y)<span class="keyword"> const </span>{</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;        <a class="code" href="struct_m_n_n_1_1_c_v_1_1_point.html">Point</a> result;</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;        this-&gt;getMapXYProc()(*<span class="keyword">this</span>, x, y, &amp;result);</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;        <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;    }</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;    <span class="keywordtype">bool</span> mapRect(<a class="code" href="struct_m_n_n_1_1_c_v_1_1_rect.html">Rect</a>* dst, <span class="keyword">const</span> <a class="code" href="struct_m_n_n_1_1_c_v_1_1_rect.html">Rect</a>&amp; src) <span class="keyword">const</span>;</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;</div><div class="line"><a name="l01304"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a2c1d97cacdb68559670ed7ebd5a02b40"> 1304</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a2c1d97cacdb68559670ed7ebd5a02b40">mapRect</a>(<a class="code" href="struct_m_n_n_1_1_c_v_1_1_rect.html">Rect</a>* rect)<span class="keyword"> const </span>{</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;        <span class="keywordflow">return</span> this-&gt;mapRect(rect, *rect);</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;    }</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;</div><div class="line"><a name="l01313"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a549c7d38b10404a4b61043b140dfebdc"> 1313</a></span>&#160;    <a class="code" href="struct_m_n_n_1_1_c_v_1_1_rect.html">Rect</a> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a549c7d38b10404a4b61043b140dfebdc">mapRect</a>(<span class="keyword">const</span> <a class="code" href="struct_m_n_n_1_1_c_v_1_1_rect.html">Rect</a>&amp; src)<span class="keyword"> const </span>{</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;        <a class="code" href="struct_m_n_n_1_1_c_v_1_1_rect.html">Rect</a> dst;</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;        (void)this-&gt;mapRect(&amp;dst, src);</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;        <span class="keywordflow">return</span> dst;</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;    }</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;    <span class="keywordtype">void</span> mapRectScaleTranslate(<a class="code" href="struct_m_n_n_1_1_c_v_1_1_rect.html">Rect</a>* dst, <span class="keyword">const</span> <a class="code" href="struct_m_n_n_1_1_c_v_1_1_rect.html">Rect</a>&amp; src) <span class="keyword">const</span>;</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;</div><div class="line"><a name="l01341"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a67caa4d57647261577f3462efa1d27d1"> 1341</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a67caa4d57647261577f3462efa1d27d1">cheapEqualTo</a>(<span class="keyword">const</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a>&amp; m)<span class="keyword"> const </span>{</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;        <span class="keywordflow">return</span> 0 == memcmp(fMat, m.fMat, <span class="keyword">sizeof</span>(fMat));</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;    }</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;    <span class="keyword">friend</span> <a class="code" href="_m_n_n_define_8h.html#a692428e2a0af8ffb79376d223a0695ab">MNN_PUBLIC</a> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a>&amp; a, <span class="keyword">const</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a>&amp; b);</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;</div><div class="line"><a name="l01363"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a9a2ab581fd780faf0c80cd3765fd3121"> 1363</a></span>&#160;    <span class="keyword">friend</span> <a class="code" href="_m_n_n_define_8h.html#a692428e2a0af8ffb79376d223a0695ab">MNN_PUBLIC</a> <span class="keywordtype">bool</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a9a2ab581fd780faf0c80cd3765fd3121">operator!=</a>(<span class="keyword">const</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a>&amp; a, <span class="keyword">const</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a>&amp; b) {</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;        <span class="keywordflow">return</span> !(a == b);</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;    }</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;    <span class="keywordtype">void</span> dump() <span class="keyword">const</span>;</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;    <span class="keywordtype">float</span> getMinScale() <span class="keyword">const</span>;</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;    <span class="keywordtype">float</span> getMaxScale() <span class="keyword">const</span>;</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;    <span class="keywordtype">bool</span> getMinMaxScales(<span class="keywordtype">float</span> scaleFactors[2]) <span class="keyword">const</span>;</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a>&amp; I();</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a>&amp; InvalidMatrix();</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;</div><div class="line"><a name="l01440"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a7161b6a80fa3424019b029d29d084fc4"> 1440</a></span>&#160;    <span class="keyword">static</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a7161b6a80fa3424019b029d29d084fc4">Concat</a>(<span class="keyword">const</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a>&amp; a, <span class="keyword">const</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a>&amp; b) {</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;        <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html">Matrix</a> result;</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;        result.<a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a2e76afc5160219aa3c331cd2263d622c">setConcat</a>(a, b);</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;        <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;    }</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;</div><div class="line"><a name="l01449"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#af68596240a7b1dded463fd642f9a3362"> 1449</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#af68596240a7b1dded463fd642f9a3362">dirtyMatrixTypeCache</a>() {</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;        this-&gt;setTypeMask(kUnknown_Mask);</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;    }</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;</div><div class="line"><a name="l01464"></a><span class="lineno"><a class="line" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a9900fc53c7e53893983ae6053ac2d98f"> 1464</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_m_n_n_1_1_c_v_1_1_matrix.html#a9900fc53c7e53893983ae6053ac2d98f">setScaleTranslate</a>(<span class="keywordtype">float</span> sx, <span class="keywordtype">float</span> sy, <span class="keywordtype">float</span> tx, <span class="keywordtype">float</span> ty) {</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;        fMat[kMScaleX] = sx;</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;        fMat[kMSkewX]  = 0;</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;        fMat[kMTransX] = tx;</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;        fMat[kMSkewY]  = 0;</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;        fMat[kMScaleY] = sy;</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;        fMat[kMTransY] = ty;</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;        fMat[kMPersp0] = 0;</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;        fMat[kMPersp1] = 0;</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;        fMat[kMPersp2] = 1;</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;        <span class="keywordtype">unsigned</span> mask = 0;</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;        <span class="keywordflow">if</span> (sx != 1 || sy != 1) {</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;            mask |= kScale_Mask;</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;        }</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;        <span class="keywordflow">if</span> (tx || ty) {</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;            mask |= kTranslate_Mask;</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;        }</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;        this-&gt;setTypeMask(mask | kRectStaysRect_Mask);</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;    }</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kRectStaysRect_Mask = 0x10;</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kOnlyPerspectiveValid_Mask = 0x40;</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kUnknown_Mask = 0x80;</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kORableMasks = kTranslate_Mask | kScale_Mask | kAffine_Mask | kPerspective_Mask;</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160;    <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> kAllMasks =</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160;        kTranslate_Mask | kScale_Mask | kAffine_Mask | kPerspective_Mask | kRectStaysRect_Mask;</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160;</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;    <span class="keywordtype">float</span> fMat[9];</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;    <span class="keyword">mutable</span> uint32_t fTypeMask;</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> ComputeInv(<span class="keywordtype">float</span> dst[9], <span class="keyword">const</span> <span class="keywordtype">float</span> src[9], <span class="keywordtype">double</span> invDet, <span class="keywordtype">bool</span> isPersp);</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;    uint8_t computeTypeMask() <span class="keyword">const</span>;</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;    uint8_t computePerspectiveTypeMask() <span class="keyword">const</span>;</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;    <span class="keywordtype">void</span> setTypeMask(<span class="keywordtype">int</span> mask) {</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;        <span class="comment">// allow kUnknown or a valid mask</span></div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;        <a class="code" href="_m_n_n_define_8h.html#ae353a9c1a1afe84eeefafac7d7f5bed1">MNN_ASSERT</a>(kUnknown_Mask == mask || (mask &amp; kAllMasks) == mask ||</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;                   ((kUnknown_Mask | kOnlyPerspectiveValid_Mask) &amp; mask) ==</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;                       (kUnknown_Mask | kOnlyPerspectiveValid_Mask));</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160;        fTypeMask = (uint8_t)(mask);</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;    }</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;    <span class="keywordtype">void</span> orTypeMask(<span class="keywordtype">int</span> mask) {</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;        <a class="code" href="_m_n_n_define_8h.html#ae353a9c1a1afe84eeefafac7d7f5bed1">MNN_ASSERT</a>((mask &amp; kORableMasks) == mask);</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;        fTypeMask = (uint8_t)(fTypeMask | mask);</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;    }</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;    <span class="keywordtype">void</span> clearTypeMask(<span class="keywordtype">int</span> mask) {</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;        <span class="comment">// only allow a valid mask</span></div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;        <a class="code" href="_m_n_n_define_8h.html#ae353a9c1a1afe84eeefafac7d7f5bed1">MNN_ASSERT</a>((mask &amp; kAllMasks) == mask);</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;        fTypeMask = fTypeMask &amp; ~mask;</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;    }</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;    TypeMask getPerspectiveTypeMaskOnly()<span class="keyword"> const </span>{</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;        <span class="keywordflow">if</span> ((fTypeMask &amp; kUnknown_Mask) &amp;&amp; !(fTypeMask &amp; kOnlyPerspectiveValid_Mask)) {</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160;            fTypeMask = this-&gt;computePerspectiveTypeMask();</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;        }</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;        <span class="keywordflow">return</span> (TypeMask)(fTypeMask &amp; 0xF);</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;    }</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;    <span class="keywordtype">bool</span> isTriviallyIdentity()<span class="keyword"> const </span>{</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;        <span class="keywordflow">if</span> (fTypeMask &amp; kUnknown_Mask) {</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;        }</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;        <span class="keywordflow">return</span> ((fTypeMask &amp; 0xF) == 0);</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;    }</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160;</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;    <span class="keyword">inline</span> <span class="keywordtype">void</span> updateTranslateMask() {</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;        <span class="keywordflow">if</span> ((fMat[kMTransX] != 0) | (fMat[kMTransY] != 0)) {</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;            fTypeMask |= kTranslate_Mask;</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;            fTypeMask &amp;= ~kTranslate_Mask;</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;        }</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;    }</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;    <span class="keyword">typedef</span> void (*MapXYProc)(<span class="keyword">const</span> Matrix&amp; mat, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, Point* result);</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160;    <span class="keyword">static</span> MapXYProc GetMapXYProc(TypeMask mask) {</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;        <a class="code" href="_m_n_n_define_8h.html#ae353a9c1a1afe84eeefafac7d7f5bed1">MNN_ASSERT</a>((mask &amp; ~kAllMasks) == 0);</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;        <span class="keywordflow">return</span> gMapXYProcs[mask &amp; kAllMasks];</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;    }</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;    MapXYProc getMapXYProc()<span class="keyword"> const </span>{</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160;        <span class="keywordflow">return</span> GetMapXYProc(this-&gt;getType());</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;    }</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;    <span class="keyword">typedef</span> void (*MapPtsProc)(<span class="keyword">const</span> Matrix&amp; mat, Point dst[], <span class="keyword">const</span> Point src[], <span class="keywordtype">int</span> count);</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160;</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;    <span class="keyword">static</span> MapPtsProc GetMapPtsProc(TypeMask mask) {</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;        <a class="code" href="_m_n_n_define_8h.html#ae353a9c1a1afe84eeefafac7d7f5bed1">MNN_ASSERT</a>((mask &amp; ~kAllMasks) == 0);</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;        <span class="keywordflow">return</span> gMapPtsProcs[mask &amp; kAllMasks];</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;    }</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;    MapPtsProc getMapPtsProc()<span class="keyword"> const </span>{</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;        <span class="keywordflow">return</span> GetMapPtsProc(this-&gt;getType());</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;    }</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;    <span class="keywordtype">bool</span> invertNonIdentity(Matrix* inverse) <span class="keyword">const</span>;</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> Identity_xy(<span class="keyword">const</span> Matrix&amp;, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, Point*);</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> Trans_xy(<span class="keyword">const</span> Matrix&amp;, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, Point*);</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> Scale_xy(<span class="keyword">const</span> Matrix&amp;, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, Point*);</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> ScaleTrans_xy(<span class="keyword">const</span> Matrix&amp;, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, Point*);</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> Rot_xy(<span class="keyword">const</span> Matrix&amp;, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, Point*);</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> RotTrans_xy(<span class="keyword">const</span> Matrix&amp;, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, Point*);</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> Persp_xy(<span class="keyword">const</span> Matrix&amp;, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, Point*);</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> MapXYProc gMapXYProcs[];</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> Identity_pts(<span class="keyword">const</span> Matrix&amp;, Point[], <span class="keyword">const</span> Point[], <span class="keywordtype">int</span>);</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> Trans_pts(<span class="keyword">const</span> Matrix&amp;, Point dst[], <span class="keyword">const</span> Point[], <span class="keywordtype">int</span>);</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> Scale_pts(<span class="keyword">const</span> Matrix&amp;, Point dst[], <span class="keyword">const</span> Point[], <span class="keywordtype">int</span>);</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> ScaleTrans_pts(<span class="keyword">const</span> Matrix&amp;, Point dst[], <span class="keyword">const</span> Point[], <span class="keywordtype">int</span> count);</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> Persp_pts(<span class="keyword">const</span> Matrix&amp;, Point dst[], <span class="keyword">const</span> Point[], <span class="keywordtype">int</span>);</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> Affine_vpts(<span class="keyword">const</span> Matrix&amp;, Point dst[], <span class="keyword">const</span> Point[], <span class="keywordtype">int</span>);</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> MapPtsProc gMapPtsProcs[];</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;};</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;} <span class="comment">// namespace CV</span></div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;} <span class="comment">// namespace MNN</span></div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a8cb83b8451e52f04224a2f10a8d7e977"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a8cb83b8451e52f04224a2f10a8d7e977">MNN::CV::Matrix::get</a></div><div class="ttdeci">float get(int index) const</div><div class="ttdef"><b>Definition:</b> Matrix.h:285</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_ab70b003dcbc742777bb908511be6fd63"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#ab70b003dcbc742777bb908511be6fd63">MNN::CV::Matrix::operator[]</a></div><div class="ttdeci">float &amp; operator[](int index)</div><div class="ttdef"><b>Definition:</b> Matrix.h:372</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_ad46ca718c770bba11643c0ecc9a402fa"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#ad46ca718c770bba11643c0ecc9a402fa">MNN::CV::Matrix::setIdentity</a></div><div class="ttdeci">void setIdentity()</div><div class="ttdef"><b>Definition:</b> Matrix.h:535</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_afda91b2de2547c56812a990b343adea8"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#afda91b2de2547c56812a990b343adea8">MNN::CV::Matrix::getScaleX</a></div><div class="ttdeci">float getScaleX() const</div><div class="ttdef"><b>Definition:</b> Matrix.h:295</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_ac4c57512b9ff170b8c27141ac9dc2b16"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16">MNN::CV::Matrix::ScaleToFit</a></div><div class="ttdeci">ScaleToFit</div><div class="ttdef"><b>Definition:</b> Matrix.h:1064</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a0d45157a305e7063765f534030163f21"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a0d45157a305e7063765f534030163f21">MNN::CV::Matrix::mapXY</a></div><div class="ttdeci">Point mapXY(float x, float y) const</div><div class="ttdef"><b>Definition:</b> Matrix.h:1279</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_ad0a7c082d559ef73f93ec16e9644b590"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#ad0a7c082d559ef73f93ec16e9644b590">MNN::CV::Matrix::MakeTrans</a></div><div class="ttdeci">static Matrix MakeTrans(float dx, float dy)</div><div class="ttdef"><b>Definition:</b> Matrix.h:95</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_af6e21da1f6a1342a1e7c3f060d96af4d"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#af6e21da1f6a1342a1e7c3f060d96af4d">MNN::CV::Matrix::getTranslateX</a></div><div class="ttdeci">float getTranslateX() const</div><div class="ttdef"><b>Definition:</b> Matrix.h:333</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a80a9efb21f22e19461a7f15f41c7e301"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a80a9efb21f22e19461a7f15f41c7e301">MNN::CV::Matrix::isIdentity</a></div><div class="ttdeci">bool isIdentity() const</div><div class="ttdef"><b>Definition:</b> Matrix.h:161</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a9900fc53c7e53893983ae6053ac2d98f"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a9900fc53c7e53893983ae6053ac2d98f">MNN::CV::Matrix::setScaleTranslate</a></div><div class="ttdeci">void setScaleTranslate(float sx, float sy, float tx, float ty)</div><div class="ttdef"><b>Definition:</b> Matrix.h:1464</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a1e7d34b3eb6adb9ec940827edf03082b"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a1e7d34b3eb6adb9ec940827edf03082b">MNN::CV::Matrix::isScaleTranslate</a></div><div class="ttdeci">bool isScaleTranslate() const</div><div class="ttdef"><b>Definition:</b> Matrix.h:174</div></div>
<div class="ttc" id="_m_n_n_define_8h_html_ae353a9c1a1afe84eeefafac7d7f5bed1"><div class="ttname"><a href="_m_n_n_define_8h.html#ae353a9c1a1afe84eeefafac7d7f5bed1">MNN_ASSERT</a></div><div class="ttdeci">#define MNN_ASSERT(x)</div><div class="ttdef"><b>Definition:</b> MNNDefine.h:41</div></div>
<div class="ttc" id="struct_m_n_n_1_1_c_v_1_1_rect_html"><div class="ttname"><a href="struct_m_n_n_1_1_c_v_1_1_rect.html">MNN::CV::Rect</a></div><div class="ttdef"><b>Definition:</b> Rect.h:54</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_aafea25177ca15b3e66b796811ff12839"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#aafea25177ca15b3e66b796811ff12839">MNN::CV::Matrix::setTranslateX</a></div><div class="ttdeci">void setTranslateX(float v)</div><div class="ttdef"><b>Definition:</b> Matrix.h:427</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a7a50cf880189f8828cbe643c20086c36"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a7a50cf880189f8828cbe643c20086c36">MNN::CV::Matrix::getSkewX</a></div><div class="ttdeci">float getSkewX() const</div><div class="ttdef"><b>Definition:</b> Matrix.h:324</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a2ef2a1e031dd5de7ff653038c401c1d4"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a2ef2a1e031dd5de7ff653038c401c1d4">MNN::CV::Matrix::setScaleX</a></div><div class="ttdeci">void setScaleX(float v)</div><div class="ttdef"><b>Definition:</b> Matrix.h:395</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a0e7c43a69da5564fade1134e245e5e65"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a0e7c43a69da5564fade1134e245e5e65">MNN::CV::Matrix::setSkewX</a></div><div class="ttdeci">void setSkewX(float v)</div><div class="ttdef"><b>Definition:</b> Matrix.h:419</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a387100b9690549b671cf69a82cc134d1"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a387100b9690549b671cf69a82cc134d1">MNN::CV::Matrix::setPerspY</a></div><div class="ttdeci">void setPerspY(float v)</div><div class="ttdef"><b>Definition:</b> Matrix.h:453</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a4a4b603b48253e55fc27c2677898fe18"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a4a4b603b48253e55fc27c2677898fe18">MNN::CV::Matrix::getSkewY</a></div><div class="ttdeci">float getSkewY() const</div><div class="ttdef"><b>Definition:</b> Matrix.h:314</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a920af77c5e089af12f9884583216ee89"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a920af77c5e089af12f9884583216ee89">MNN::CV::Matrix::getType</a></div><div class="ttdeci">TypeMask getType() const</div><div class="ttdef"><b>Definition:</b> Matrix.h:145</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_ac4c57512b9ff170b8c27141ac9dc2b16a72d6657e24aae9858f946dcc8d638538"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16a72d6657e24aae9858f946dcc8d638538">MNN::CV::Matrix::kFill_ScaleToFit</a></div><div class="ttdoc">scales in x and y to fill destination Rect</div><div class="ttdef"><b>Definition:</b> Matrix.h:1065</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a012a6fe8b976cae6f08d356855a5fd53"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a012a6fe8b976cae6f08d356855a5fd53">MNN::CV::Matrix::MakeRectToRect</a></div><div class="ttdeci">static Matrix MakeRectToRect(const Rect &amp;src, const Rect &amp;dst, ScaleToFit stf)</div><div class="ttdef"><b>Definition:</b> Matrix.h:1103</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_af906c3d8207529707974d551d329ce39"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#af906c3d8207529707974d551d329ce39">MNN::CV::Matrix::setTranslateY</a></div><div class="ttdeci">void setTranslateY(float v)</div><div class="ttdef"><b>Definition:</b> Matrix.h:435</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a3b05fbab55e352623bc6472a3a29b426"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a3b05fbab55e352623bc6472a3a29b426">MNN::CV::Matrix::MakeScale</a></div><div class="ttdeci">static Matrix MakeScale(float scale)</div><div class="ttdef"><b>Definition:</b> Matrix.h:79</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a3f97f8217503e8cb7ed70d2d54960a54"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a3f97f8217503e8cb7ed70d2d54960a54">MNN::CV::Matrix::mapXY</a></div><div class="ttdeci">void mapXY(float x, float y, Point *result) const</div><div class="ttdef"><b>Definition:</b> Matrix.h:1259</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_ac4c57512b9ff170b8c27141ac9dc2b16aae2bd4bf3c03002dc0011669a9125a95"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16aae2bd4bf3c03002dc0011669a9125a95">MNN::CV::Matrix::kCenter_ScaleToFit</a></div><div class="ttdoc">scales and aligns to center</div><div class="ttdef"><b>Definition:</b> Matrix.h:1067</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a28974d70ccb159f0c79ebc46f73fdfde"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a28974d70ccb159f0c79ebc46f73fdfde">MNN::CV::Matrix::setSkewY</a></div><div class="ttdeci">void setSkewY(float v)</div><div class="ttdef"><b>Definition:</b> Matrix.h:411</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_af7c20c9a4df9dbe0d602271baa2fae8c"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#af7c20c9a4df9dbe0d602271baa2fae8c">MNN::CV::Matrix::isTranslate</a></div><div class="ttdeci">bool isTranslate() const</div><div class="ttdef"><b>Definition:</b> Matrix.h:186</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a5f8ffb32f8988f89960254e982d5bc87"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a5f8ffb32f8988f89960254e982d5bc87">MNN::CV::Matrix::getPerspX</a></div><div class="ttdeci">float getPerspX() const</div><div class="ttdef"><b>Definition:</b> Matrix.h:350</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_af68596240a7b1dded463fd642f9a3362"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#af68596240a7b1dded463fd642f9a3362">MNN::CV::Matrix::dirtyMatrixTypeCache</a></div><div class="ttdeci">void dirtyMatrixTypeCache()</div><div class="ttdef"><b>Definition:</b> Matrix.h:1449</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a6d75cd8885bc169ebbed0a3842d0a136"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a6d75cd8885bc169ebbed0a3842d0a136">MNN::CV::Matrix::operator[]</a></div><div class="ttdeci">float operator[](int index) const</div><div class="ttdef"><b>Definition:</b> Matrix.h:273</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_ac4c57512b9ff170b8c27141ac9dc2b16ad8816240d08e10c1dc565d0218a927cd"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16ad8816240d08e10c1dc565d0218a927cd">MNN::CV::Matrix::kEnd_ScaleToFit</a></div><div class="ttdoc">scales and aligns to right and bottom</div><div class="ttdef"><b>Definition:</b> Matrix.h:1068</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a037d7599f234e75c0869302e10a3dd32"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a037d7599f234e75c0869302e10a3dd32">MNN::CV::Matrix::invert</a></div><div class="ttdeci">bool invert(Matrix *inverse) const</div><div class="ttdef"><b>Definition:</b> Matrix.h:1132</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a994a4f0be12f2881186892d123f83026"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a994a4f0be12f2881186892d123f83026">MNN::CV::Matrix::Matrix</a></div><div class="ttdeci">Matrix()</div><div class="ttdef"><b>Definition:</b> Matrix.h:50</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a2c1d97cacdb68559670ed7ebd5a02b40"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a2c1d97cacdb68559670ed7ebd5a02b40">MNN::CV::Matrix::mapRect</a></div><div class="ttdeci">bool mapRect(Rect *rect) const</div><div class="ttdef"><b>Definition:</b> Matrix.h:1304</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a64ddd5b5f07a3c7671502769cf95ecf8"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a64ddd5b5f07a3c7671502769cf95ecf8">MNN::CV::Matrix::setTranslate</a></div><div class="ttdeci">void setTranslate(float dx, float dy)</div></div>
<div class="ttc" id="_m_n_n_define_8h_html_a692428e2a0af8ffb79376d223a0695ab"><div class="ttname"><a href="_m_n_n_define_8h.html#a692428e2a0af8ffb79376d223a0695ab">MNN_PUBLIC</a></div><div class="ttdeci">#define MNN_PUBLIC</div><div class="ttdef"><b>Definition:</b> MNNDefine.h:53</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_ac07d0f297600849a05dc3b175098121e"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac07d0f297600849a05dc3b175098121e">MNN::CV::Matrix::setPerspX</a></div><div class="ttdeci">void setPerspX(float v)</div><div class="ttdef"><b>Definition:</b> Matrix.h:444</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a85cd67b59f24ab307950b437c4669eae"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a85cd67b59f24ab307950b437c4669eae">MNN::CV::Matrix::MakeScale</a></div><div class="ttdeci">static Matrix MakeScale(float sx, float sy)</div><div class="ttdef"><b>Definition:</b> Matrix.h:64</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a549c7d38b10404a4b61043b140dfebdc"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a549c7d38b10404a4b61043b140dfebdc">MNN::CV::Matrix::mapRect</a></div><div class="ttdeci">Rect mapRect(const Rect &amp;src) const</div><div class="ttdef"><b>Definition:</b> Matrix.h:1313</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html">MNN::CV::Matrix</a></div><div class="ttdef"><b>Definition:</b> Matrix.h:48</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a95657f702e16d797477c9aa24ac4a0fd"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a95657f702e16d797477c9aa24ac4a0fd">MNN::CV::Matrix::set</a></div><div class="ttdeci">void set(int index, float value)</div><div class="ttdef"><b>Definition:</b> Matrix.h:385</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_afd03e03f146c891e3a7dd64cea4d09cc"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#afd03e03f146c891e3a7dd64cea4d09cc">MNN::CV::Matrix::MakeAll</a></div><div class="ttdeci">static Matrix MakeAll(float scaleX, float skewX, float transX, float skewY, float scaleY, float transY, float pers0, float pers1, float pers2)</div><div class="ttdef"><b>Definition:</b> Matrix.h:118</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a8312ffc5455b9217d8a3f3975237c026"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a8312ffc5455b9217d8a3f3975237c026">MNN::CV::Matrix::getTranslateY</a></div><div class="ttdeci">float getTranslateY() const</div><div class="ttdef"><b>Definition:</b> Matrix.h:342</div></div>
<div class="ttc" id="namespace_m_n_n_html"><div class="ttname"><a href="namespace_m_n_n.html">MNN</a></div><div class="ttdef"><b>Definition:</b> AutoTime.hpp:16</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_afe9ff946b4145e71f40205c9c23d63c7"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#afe9ff946b4145e71f40205c9c23d63c7">MNN::CV::Matrix::setRectToRect</a></div><div class="ttdeci">bool setRectToRect(const Rect &amp;src, const Rect &amp;dst, ScaleToFit stf)</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a2e76afc5160219aa3c331cd2263d622c"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a2e76afc5160219aa3c331cd2263d622c">MNN::CV::Matrix::setConcat</a></div><div class="ttdeci">void setConcat(const Matrix &amp;a, const Matrix &amp;b)</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_aebb3f83534c38eec1c605c143db5e440"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#aebb3f83534c38eec1c605c143db5e440">MNN::CV::Matrix::getScaleY</a></div><div class="ttdeci">float getScaleY() const</div><div class="ttdef"><b>Definition:</b> Matrix.h:304</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a93dbff13c64c0ed0e9005b2609c550a1"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a93dbff13c64c0ed0e9005b2609c550a1">MNN::CV::Matrix::mapPoints</a></div><div class="ttdeci">void mapPoints(Point dst[], const Point src[], int count) const</div><div class="ttdef"><b>Definition:</b> Matrix.h:1209</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_ab7c756e36573cc6ef1c4f77c3088eaee"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#ab7c756e36573cc6ef1c4f77c3088eaee">MNN::CV::Matrix::mapPoints</a></div><div class="ttdeci">void mapPoints(Point pts[], int count) const</div><div class="ttdef"><b>Definition:</b> Matrix.h:1239</div></div>
<div class="ttc" id="struct_m_n_n_1_1_c_v_1_1_point_html"><div class="ttname"><a href="struct_m_n_n_1_1_c_v_1_1_point.html">MNN::CV::Point</a></div><div class="ttdef"><b>Definition:</b> Rect.h:37</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a41c5adfb5b4236e756b95884de47c985"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a41c5adfb5b4236e756b95884de47c985">MNN::CV::Matrix::setAll</a></div><div class="ttdeci">void setAll(float scaleX, float skewX, float transX, float skewY, float scaleY, float transY, float persp0, float persp1, float persp2)</div><div class="ttdef"><b>Definition:</b> Matrix.h:473</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a361d0f247ef268c716f3575c2c46c640"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a361d0f247ef268c716f3575c2c46c640">MNN::CV::Matrix::reset</a></div><div class="ttdeci">void reset()</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_aae4f4671dcd3eb69251b6b69b756c8eb"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#aae4f4671dcd3eb69251b6b69b756c8eb">MNN::CV::Matrix::rectStaysRect</a></div><div class="ttdeci">bool rectStaysRect() const</div><div class="ttdef"><b>Definition:</b> Matrix.h:211</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a32c757775b188138cf0b89f2cfd7f2fd"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a32c757775b188138cf0b89f2cfd7f2fd">MNN::CV::Matrix::setScale</a></div><div class="ttdeci">void setScale(float sx, float sy, float px, float py)</div></div>
<div class="ttc" id="_rect_8h_html"><div class="ttname"><a href="_rect_8h.html">Rect.h</a></div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a0fe9863cb0f149e97c57e0bd310a8091"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a0fe9863cb0f149e97c57e0bd310a8091">MNN::CV::Matrix::preservesAxisAlignment</a></div><div class="ttdeci">bool preservesAxisAlignment() const</div><div class="ttdef"><b>Definition:</b> Matrix.h:239</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_ac4c57512b9ff170b8c27141ac9dc2b16a7ecd2ad82e428b97949ce05fb72d2bb7"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#ac4c57512b9ff170b8c27141ac9dc2b16a7ecd2ad82e428b97949ce05fb72d2bb7">MNN::CV::Matrix::kStart_ScaleToFit</a></div><div class="ttdoc">scales and aligns to left and top</div><div class="ttdef"><b>Definition:</b> Matrix.h:1066</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a7161b6a80fa3424019b029d29d084fc4"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a7161b6a80fa3424019b029d29d084fc4">MNN::CV::Matrix::Concat</a></div><div class="ttdeci">static Matrix Concat(const Matrix &amp;a, const Matrix &amp;b)</div><div class="ttdef"><b>Definition:</b> Matrix.h:1440</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a536b3ee8befe547496e47bef9422ca22"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a536b3ee8befe547496e47bef9422ca22">MNN::CV::Matrix::setScaleY</a></div><div class="ttdeci">void setScaleY(float v)</div><div class="ttdef"><b>Definition:</b> Matrix.h:403</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a67caa4d57647261577f3462efa1d27d1"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a67caa4d57647261577f3462efa1d27d1">MNN::CV::Matrix::cheapEqualTo</a></div><div class="ttdeci">bool cheapEqualTo(const Matrix &amp;m) const</div><div class="ttdef"><b>Definition:</b> Matrix.h:1341</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a2e02d4d6e16ccdb49029aa44bab08330"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a2e02d4d6e16ccdb49029aa44bab08330">MNN::CV::Matrix::get9</a></div><div class="ttdeci">void get9(float buffer[9]) const</div><div class="ttdef"><b>Definition:</b> Matrix.h:493</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a4d66f9e294a7bf8fcd111568f7f096c3"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a4d66f9e294a7bf8fcd111568f7f096c3">MNN::CV::Matrix::TypeMask</a></div><div class="ttdeci">TypeMask</div><div class="ttdef"><b>Definition:</b> Matrix.h:129</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a9a2ab581fd780faf0c80cd3765fd3121"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a9a2ab581fd780faf0c80cd3765fd3121">MNN::CV::Matrix::operator!=</a></div><div class="ttdeci">friend MNN_PUBLIC bool operator!=(const Matrix &amp;a, const Matrix &amp;b)</div><div class="ttdef"><b>Definition:</b> Matrix.h:1363</div></div>
<div class="ttc" id="class_m_n_n_1_1_c_v_1_1_matrix_html_a63dce01735b6ee0eddf90ee71d7eadf2"><div class="ttname"><a href="class_m_n_n_1_1_c_v_1_1_matrix.html#a63dce01735b6ee0eddf90ee71d7eadf2">MNN::CV::Matrix::getPerspY</a></div><div class="ttdeci">float getPerspY() const</div><div class="ttdef"><b>Definition:</b> Matrix.h:358</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
制作者 &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.15
</small></address>
</body>
</html>
